<?php
if (! defined ( 'BASEPATH' )) {
	exit ( 'No direct script access allowed' );
}
class Repuesto extends CI_Controller {
	// Directorio
	const STR_DIRECTORIO_IMAGENES = './';
	function __construct() {
		parent::__construct ();
		$this->load->model ( 'repuesto_model', '', true );
		$this->load->model ( 'tipo_carroceria_model', '', true );
		$this->load->model ( 'marca_model', '', true );
		$this->load->model ( 'modelo_model', '', true );
		$this->load->library ( 'form_validation' );
		$this->load->helper ( 'form' );
	}
	
	/**
	 * metodo que muestra la bandeja de todos los repuestos de la bd
	 */
	function index() {
		$data ['page_title'] = "Bandeja de Repuesto";
		$repuesto = $this->repuesto_model->getRepuesto ();
		$data ['repuesto'] = $repuesto;
		$this->load->view ( 'repuesto/repuesto_view', $data );
	}
	function index2($a) {
		$data ['page_title'] = "Bandeja de Repuesto";
		$repuesto = $this->repuesto_model->getRepuesto ();
		$data ['repuesto'] = $repuesto;
		switch ($a) {
			case 1 :
				$data ['mensaje'] = "La operación se realizó satisfactoriamente.";
				$data ['class'] = "alert_success";
				break;
			case 2 :
				$data ['mensaje'] = "La operación se realizó satisfactoriamente.";
				$data ['class'] = "alert_success";
				break;
			case 3 :
				$data ['mensaje'] = "La operación se realizó satisfactoriamente.";
				$data ['class'] = "alert_success";
				break;
			default :
				$data ['mensaje'] = "La operación se realizó correctamente";
				$data ['class'] = "alert_success";
		}
		$this->load->view ( 'repuesto/repuesto_view', $data );
	}
	
	/**
	 * metodo que permite insertar una carga masiva mediante un documento csv
	 * 
	 * @author Leidy Uribe Marcos
	 */
	function procesar() {
		$session_data = $this->session->userdata ( 'logged_in' );
		$id = $session_data ['id'];
		
		// Datos para la tabla repuesto
		$data ['usuario_registro'] = $id;
		$data ['fecha_registro'] = date ( 'Y-m-d H:i:s' );
		
		// obtenemos el archivo.csv
		$archivotmp = $_FILES ['archivo'] ['tmp_name'];
		
		// guardamos una ruta
		$uploaddir = self::STR_DIRECTORIO_IMAGENES;
		$archivo = $uploaddir . "archivos/" . "_" . date ( 'd-m-Y' ) . "_" . $_FILES ['archivo'] ['name'];
		
		/*
		 * movemos nuestro archivo alojado en la carpeta temporal que queramos, en este caso se
		 * guardará la ruta y el nombre del archivo que deseemos ponerle
		 */
		@move_uploaded_file ( $archivotmp, $archivo );
		// cargamos el archivo
		$lineas = file ( $uploaddir . 'archivos/' . "_" . date ( 'd-m-Y' ) . "_" . $_FILES ['archivo'] ['name'] );
		
		// inicializamos variable a 0, esto nos ayudará a indicarle que no lea la primera línea
		$i = 0;
		$mensaje = "";
		// recorremos un bucle para leer linea por linea
		foreach ( $lineas as $linea_num => $linea ) {
			/*
			 * si es diferente a 0 que no se encuentra en la primera linea (con los títulos de las
			 * columnas) y por lo tanto pueda leerla
			 */
			if ($i != 0) {
				$datos = explode ( ",", $linea );
				
				/* almacenamos los datos que vamos leyendo en una variable */
				$data ['modelo'] = trim ( $datos [0] );
				// obtengo el modelo registrado si es que esta en la base de datos
				$modelo = $this->modelo_model->getModelos ( $data );
				// obtengo el tipo de carroceria si es que esta en la base de datos
				$data ['tipo_carroceria'] = trim ( $datos [1] );
				$tipo_carroceria = $this->tipo_carroceria_model->getTipoCarroceria ( $data );
				$data ['nombre'] = trim ( $datos [2] );
				$data ['cod_repuesto'] = trim ( $datos [4] );
				$data ['ano'] = trim ( $datos [5] );
				if (($data ['modelo'] != false) && ($data ['tipo_carroceria'] != false) && ($data ['nombre'] != false) && ($data ['cod_repuesto'] != false) && ($data ['ano'] != false)) {
					if (is_numeric ( $data ['ano'] )) {
						if ((1900 < $data ['ano']) && ($data ['ano'] < date ( "Y" ))) {
							if (($modelo) && ($tipo_carroceria)) {
								$data ['id_modelo'] = $modelo ['id_modelo'];
								$data ['id_tipo_carroceria'] = $tipo_carroceria ['id_tabla_maestra'];
								if (! ($verificar_nombre)) {
									$this->repuesto_model->insert_carga_masiva ( $data );
								} else {
									$mensaje = "<font color='red'>YA EXISTE UN REPUESTO REGISTRADO CON ESE NOMBRE</font>";
								}
							} elseif (empty ( $modelo )) {
								$mensaje .= "<font color='red'>NO EXISTE UN MODELO REGISTRADO</font>";
							} elseif (empty ( $tipo_carroceria )) {
								$mensaje .= "<font color='red'>NO EXISTE UN TIPO DE CARROCERIA REGISTRADA</font>";
							} else {
								$mensaje .= "<font color='red'>NO EXISTE NI MODELO NI TIPO CARROCERIA REGISTRADO.</font>";
							}
						} else {
							$mensaje .= "<font color='red'>FECHA FUERA DE RANGO INGRESE ENTRE 1900 Y 2015</font>";
						}
					} else {
						$mensaje .= "<font color='red'>FECHA NO VALIDA INGRESE SOLO EL AÑO DEL REPUESTO</font>";
					}
				} else {
					$mensaje .= "<font color='red'>" . ERROR_MENSAJE . "</font>";
				}
				// primero verificamos si existe algun mensaje de error
				if (! empty ( $mensaje )) {
					/*
					 * creamos el archivo de errores con fecha y hora para que asi no se
					 * genere los errores posteriores en el mismo txt
					 */
					// obteniendo la fecha con la hora
					
					$file = fopen ( "log_error/errores-" . date ( 'd-m-Y' ) . "_" . time () . ".txt", "a+" ) || die ( "Problemas al crear el archivo" );
					$primera_fila = "<p><b>MODELO, TIPO DE CARROCERIA, NOMBRE DE REPUESTO, CODIGO DE REPUESTO, FECHA, ERROR</b></p>";
					$segunda_fila = "<p><i>" . $data ['modelo'] . ", " . $data ['tipo_carroceria'] . ", " . $data ['nombre'] . ", " . $data ['cod_repuesto'] . ", " . $data ['ano'] . ", " . $mensaje . "</i></p>";
					fwrite ( $file, $data ['fecha_registro'] . PHP_EOL );
					fwrite ( $file, $primera_fila );
					fwrite ( $file, $segunda_fila );
					fwrite ( $file, PHP_EOL );
					fclose ( $file );
				}
			}
			$i ++;
		}
		if (! empty ( $mensaje )) {
			echo "<script languaje='javascript'>alert('SE HAN PRESENTADO ERRORES AL MOMENTO DE INSERTAR VEA DICHOS ERRORES Y CORRIGALOS')</script>";
			$data ['page_title'] = "ERRORES GENERADOS";
			$data ['mensaje'] = "ERRORES AL MOMENTO DE INSERTAR CARGA MASIVA";
			$data ['archivo'] = file_get_contents ( "log_error/errores-" . date ( 'd-m-Y' ) . "_" . time () . ".txt" ); // Guardamos archivo.txt en $archivo
			$data ['archivo'] = ucfirst ( $data ['archivo'] ); // Le damos un poco de formato
			$data ['archivo'] = nl2br ( $data ['archivo'] ); // Transforma todos los saltos de linea en tag <br/>
			$this->load->view ( 'repuesto/masiva', $data );
		} else {
			$this->index ();
		}
	}
	
	/**
	 * metodo que permite registrar una carga individual
	 * 
	 * @author Leidy Uribe Marcos
	 */
	function individual() {
		$data ['page_title'] = "Carga Individual";
		$data ['mensaje'] = "Ingresa un repuesto nuevo";
		$tipo_carroceria = $this->tipo_carroceria_model->getListTipoCarroceria ();
		$marca = $this->marca_model->getListMarca ();
		$data ['tipo_carroceria'] = $tipo_carroceria;
		$data ['marca'] = $marca;
		$this->load->view ( 'repuesto/individual', $data );
	}
	
	/**
	 * metodo que permite ver el formulario de carga masiva
	 * 
	 * @author Leidy Uribe Marcos
	 */
	function masiva() {
		$data ['page_title'] = "Carga Masiva";
		$data ['mensaje'] = "Carga Masiva";
		$this->load->view ( 'repuesto/masiva', $data );
	}
	
	/**
	 * metodo que permite modificar el estado de un repuesto
	 * 
	 * @author Leidy Uribe Marcos
	 */
	function aceptar() {
		if (isset ( $_POST ['aceptar'] )) {
			$data ['page_title'] = 'Carga Individual';
			$data ['mensaje'] = 'Puede Modificar Datos del Repuesto';
			$data ['estado_repuesto'] = $_POST ['cbxEstado'];
			$data ['id_repuesto'] = $_POST ['txtId'];
			$tipo_carroceria = $this->tipo_carroceria_model->getListTipoCarroceria ();
			$marca = $this->marca_model->getListMarca ();
			$data ['tipo_carroceria'] = $tipo_carroceria;
			$data ['marca'] = $marca;
			
			$data ['edit'] = $this->repuesto_model->getPorid ( $data ['id_repuesto'] );
			$this->repuesto_model->updateRepuesto ( $data );
			
			$this->load->view ( 'repuesto/individual', $data );
		}
	}
	
	/**
	 * metodo que permite insertar un repuesto de forma individual a la bd
	 * 
	 * @author Leidy Uribe Marcos
	 */
	function insertar() {
		$this->form_validation->set_rules ( 'txtNombre', 'Nombre de repuesto', 'trim|is_unique[repuesto.nombre]' );
		
		if ($this->form_validation->run () == FALSE) {
			// validacion incorrecta
			$data ['page_title'] = 'REGISTRAR CARGA INDIVIDUAL';
			$data ['mensaje'] = 'Ingrese un repuesto nuevo';
			$data ['mensaje'] = 'El repuesto ya se encuentra registrado';
			$data ['class'] = "alert_error";
			$tipo_carroceria = $this->tipo_carroceria_model->getListTipoCarroceria ();
			$marca = $this->marca_model->getListMarca ();
			$data ['tipo_carroceria'] = $tipo_carroceria;
			$data ['marca'] = $marca;
			
			$this->load->view ( 'repuesto/individual', $data );
		} else {
			// Obteniendo el usuario que esta realizando la operacion
			$session_data = $this->session->userdata ( 'logged_in' );
			$id = $session_data ['id'];
			
			// Datos para la tabla repuesto
			$data ['nombre'] = $_POST ['txtNombre'];
			$data ['cod_repuesto'] = $_POST ['txtCodRepuesto'];
			$data ['marca'] = $_POST ['cbxMarca'];
			$data ['modelo'] = $_POST ['cbxModelo'];
			$data ['tipo_carroceria'] = $_POST ['cbxTipoCarroceria'];
			$data ['ano'] = $_POST ['cbxAno'];
			$data ['usuario_registro'] = $id;
			$data ['fecha_registro'] = date ( 'Y-m-d' );
			
			if ($_FILES ['imagen'] ['error'] > 0) {
				$data ['nombre_imagen'] = NULL;
				$this->repuesto_model->insert ( $data );
				$this->index2 ( 1 );
			} else {
				/**
				 * vamos a verificar si el tipo de archivo es un tipo de imagen permitido
				 * y que el tamaño del archivo no exceda los 100kb
				 */
				$permitidos = array (
						"image/jpg",
						"image/jpeg",
						"image/gif",
						"image/png" 
				);
				$limite_kb = 16384;
				if (in_array ( $_FILES ['imagen'] ['type'], $permitidos ) && $_FILES ['imagen'] ['size'] <= $limite_kb * 1024) {
					/**
					 * esta es la ruta donde copiaremos la imagen
					 * se debe crear un directorio con este mismo nombre
					 * en el mismo lugar donde estan los controllers
					 */
					// esta ruta es cuando se sube al servidor
					$uploaddir = self::STR_DIRECTORIO_IMAGENES;
					$ruta = $uploaddir . "images/repuesto/" . $_FILES ['imagen'] ['name'];
					/**
					 * comprobamos si este archivo existe para no volverlo a copiar
					 */
					if (! file_exists ( $ruta )) {
						/**
						 * aqui movemos el archivo desde la ruta temporal a nuestra ruta
						 * usamos la variable $resultado para almacenar el resultado del proceso
						 * de mover el archivo
						 * almacenara true or false
						 */
						$resultado = @move_uploaded_file ( $_FILES ["imagen"] ["tmp_name"], $ruta );
						if ($resultado) {
							$data ['nombre_imagen'] = $_FILES ['imagen'] ['name'];
							// Insertando en repuesto
							$this->repuesto_model->insert ( $data );
							$this->index2 ( 1 );
						} else {
							$data ['page_title'] = "REGISTRAR UNA CARGA INDIVIDUAL";
							$data ['mensaje'] = "Ingrese un nuevo repuesto";
							$tipo_carroceria = $this->tipo_carroceria_model->getListTipoCarroceria ();
							$marca = $this->marca_model->getListMarca ();
							$data ['tipo_carroceria'] = $tipo_carroceria;
							$data ['marca'] = $marca;
							$data ['mensaje_div'] = "ocurrio un error al mover el archivo";
							$this->load->view ( 'repuesto/individual', $data );
						}
					} else {
						$data ['page_title'] = "REGISTRAR UNA CARGA INDIVIDUAL";
						$data ['mensaje'] = "Ingrese un nuevo repuesto";
						$tipo_carroceria = $this->tipo_carroceria_model->getListTipoCarroceria ();
						$marca = $this->marca_model->getListMarca ();
						$data ['tipo_carroceria'] = $tipo_carroceria;
						$data ['marca'] = $marca;
						$data ['mensaje_div'] = $_FILES ['imagen'] ['name'] . ", este archivo existe";
						$this->load->view ( 'repuesto/individual', $data );
					}
				} else {
					$data ['page_title'] = "REGISTRAR CARGA INDIVIDUAL";
					$data ['mensaje'] = "Ingrese un nuevo repuesto";
					$tipo_carroceria = $this->tipo_carroceria_model->getListTipoCarroceria ();
					$marca = $this->marca_model->getListMarca ();
					$data ['tipo_carroceria'] = $tipo_carroceria;
					$data ['marca'] = $marca;
					$data ['mensaje_div'] = "archivo no permitido, es tipo de archivo prohibido o excede el tama&ntilde;o de $limite_kb Kilobytes";
					$this->load->view ( 'repuesto/individual', $data );
				}
			}
		}
	}
	
	/**
	 * metodo que permite ver sin modificar los detalles del repuesto
	 * 
	 * @author Leidy Uribe Marcos
	 */
	function ver() {
		$data ['page_title'] = "Repuesto";
		$data ['mensaje'] = "Usted puede ver los datos del repuesto";
		$data ['repuesto'] = $this->repuesto_model->getPorid ( $_GET ['id'] );
		$this->load->view ( 'repuesto/individual', $data );
	}
	
	/**
	 * metodo que permite editar los datos del repuesto
	 * 
	 * @author Leidy Uribe Marcos
	 */
	function accion() {
		$data ['page_title'] = "Repuesto";
		$data ['mensaje'] = "Usted puede editar los datos del repuesto";
		$tipo_carroceria = $this->tipo_carroceria_model->getListTipoCarroceria ();
		$marca = $this->marca_model->getListMarca ();
		$data ['tipo_carroceria'] = $tipo_carroceria;
		$data ['marca'] = $marca;
		$data ['edit'] = $this->repuesto_model->getPorid ( $_GET ['id'] );
		$this->load->view ( 'repuesto/individual', $data );
	}
	
	/**
	 * metodo que inserta las modificaciones a la tabla repuestos
	 * 
	 * @author Leidy Uribe Marcos
	 */
	function editar() {
		// Obteniendo el usuario que esta realizando la operacion
		$session_data = $this->session->userdata ( 'logged_in' );
		$id = $session_data ['id'];
		
		// Datos para la tabla repuesto
		$data ['id'] = $_POST ['txtId'];
		// Datos para marca y modelo
		$data ['marca'] = $_POST ['cbxMarca'];
		$data ['modelo'] = $_POST ['cbxModelo'];
		$data ['tipo'] = $_POST ['cbxTipoCarroceria'];
		$data ['nombre'] = $_POST ['txtNombre'];
		$data ['cod_repuesto'] = $_POST ['txtCodRepuesto'];
		$data ['ano'] = $_POST ['cbxAno'];
		$data ['usuario_modificacion'] = $id;
		$data ['fecha_modificacion'] = date ( 'Y-m-d' );
		// PARA GUARDAR EL IP DEL QUE REALIZO MODIFICACION
		$data ['ip'] = $this->input->ip_address ();
		
		// para modificar la imagen
		if (empty ( $_POST ['imagen'] )) {
			$data ['nombre_imagen'] = NULL;
			$this->repuesto_model->update ( $data );
			$this->index2(1);
		} else {
			if ($_FILES ['imagen'] ['error'] > 0) {
				echo "<script languaje = 'javascript'>alert('Ha ocurrido un error')</script>";
				$data ['page_title'] = "Bandeja de Repuesto";
				$repuesto = $this->repuesto_model->getRepuesto ();
				$data ['repuesto'] = $repuesto;
				$this->load->view ( 'repuesto/repuesto_view', $data );
			} else {
				/*
				 * verificamos que sea un tipo de imagen permitida y que cumpla con el tamaño
				 * requerido
				 */
				$permitidos = array (
						"image/jpg",
						"image/jpeg",
						"image/gif",
						"image/png" 
				);
				$limite_kb = 16384;
				if (in_array ( $_FILES ['imagen'] ['type'], $permitidos ) && $_FILES ['imagen'] ['size'] <= $limite_kb * 1024) {
					// ruta donde copiaremos la imagen
					$uploaddir = self::STR_DIRECTORIO_IMAGENES;
					$ruta = $uploaddir . "images/repuesto/" . $_FILES ['imagen'] ['name'];
					/* comprobamos si el archivo existe para no volver a copiarlo */
					if (! file_exists ( $ruta )) {
						/*
						 * movemos el archivo desde la ruta temporal a nuestra ruta
						 * usamos la variable $resultado que almacenara el resultado del proceso
						 * de mover el archivo regresa true o false
						 */
						$resultado = @move_uploaded_file ( $_FILES ['imagen'] ['tmp_name'], $ruta );
						if ($resultado) {
							$data ['nombre_imagen'] = $_FILES ['imagen'] ['name'];
							// busco el nombre de la imagen guardada en repuesto para borrarla de la carpeta
							$buscar_foto = $this->repuesto_model->getPorid ( $data ['id'] );
							foreach ( $buscar_foto as $bf ) {
								$data ['imagen_anterior'] = $bf->imagen;
							}
							// borrar la anterior foto de la carpeta
							unlink ( $uploaddir . "images/repuesto/" . $data ['imagen_anterior'] );
							// editando en repuesto
							$this->repuesto_model->update ( $data );
							$this->index2 ( 2 );
						} else {
							echo "<script languaje = 'javascript'>alert('Ocurrio un error al mover el archivo')</script>";
							$data ['page_title'] = "Bandeja de Repuesto";
							$repuesto = $this->repuesto_model->getRepuesto ();
							$data ['repuesto'] = $repuesto;
							$this->load->view ( 'repuesto/repuesto_view', $data );
						}
					} else {
						$name = $_FILES ['imagen'] ['name'];
						echo "<script languaje='javascript'>alert('$name, este archivo ya existe')</script>";
						$data ['page_title'] = "Bandeja de Repuesto";
						$repuesto = $this->repuesto_model->getRepuesto ();
						$data ['repuesto'] = $repuesto;
						$this->load->view ( 'repuesto/repuesto_view', $data );
					}
				} else {
					echo "<script languaje='javascript'>alert('archivo no permitido, es tipo de archivo prohibido o excede el tama\u00f1o de $limite_kb Kilobytes')</script>";
					$data ['page_title'] = "Bandeja de Repuesto";
					$repuesto = $this->repuesto_model->getRepuesto ();
					$data ['repuesto'] = $repuesto;
					$this->load->view ( 'repuesto/repuesto_view', $data );
				}
			}
		}
	}
	function anular() {
		$id = $_GET ['id'];
		$this->repuesto_model->cancel ( $id );
		$this->index2 ( 3 );
	}
	function cargarModelo() {
		$data ['id'] = $_GET ['cbxMarca'];
		$modelo = $this->modelo_model->getPorMarca ( $data );
		$data ['modelo'] = $modelo;
		$this->load->view ( 'combos_view/cargar_modelo', $data );
	}
	
	/**
	 * Metodo que obtiene los repuestos asociados a un modelo y a un tipo de
	 * carroceria.
	 *
	 * @author Fernando Esteban Valerio
	 * @version 1.0
	 */
	function getListRepuesto() {
		$cadena = '<option value="">' . STR_VALOR_INICIAL . '</option>';
		
		$idModelo = filter_input ( INPUT_POST, 'idModelo' );
		$idTipoCarroceria = filter_input ( INPUT_POST, 'idTipoCarroceria' );
		$lstRepuesto = $this->repuesto_model->getListRepuesto ( $idModelo, $idTipoCarroceria );
		foreach ( $lstRepuesto as $data ) {
			$cadena .= '<option value="' . $data->id_repuesto . '">' . $data->nombre . '</option>';
		}
		echo $cadena;
	}
}

?>